#!/bin/bash

rfm_AI_MODEL_HOST_URL="$1"
rfm_AI_MODEL_NAME="$2"
rfm_AI_MODEL_TEMPERATURE=$3
rfm_AI_MODEL_API_KEY="$4"

# 读取用户输入, 现在新的方案是在rfm.c里面设置环境变量，通过环境变量传递prompt,避免用户prompt里面有引号的复杂的需要转义的情况
# rfm_AI_MODEL_prompt=$(cat)
# 关闭连接到管道的0号文件（通常是标准输入），然后将其重新设置为从终端读取数据
# exec 0</dev/tty

# Function to check if file is text
is_text_file() {
    #file -b --mime-type "$1" | grep -q '^text/'
    #上面这种不行，比如gentoo 里的ebuild文件，就被判断为非文本文件
    file -i "$1" |grep -q -e 'charset=us-ascii' -e 'charset=utf-8'
}

# 初始化文件列表
UNSUPPORTED_FILES_LIST=()
MESSAGES_LIST=()
MULTIMODAL_FILES=()  # 新增：专门存储多模态文件

# 从环境变量获取文件列表
if [ -n "$RFM_SELECTED_FILES" ]; then
    while IFS= read -e -r filepath; do
        if [ -f "$filepath" ] && [ -r "$filepath" ]; then
            # 检查文件类型
            file_type=$(file -b --mime-type "$filepath")

            # 检查是否是对话记录文件
            if [[ "$filepath" =~ \.rfmAI\.md$ ]]; then
	    #if [[ "$filepath" == *.rfmAI.md ]]; then# 我之前是这么写的，deepseek给我改成上面正则表达的形式，说我这样可能误配 x.rfmAI.md.txt, 我就纳闷了，我那样写可读性高啊，*号是白加的吗？还是说不同的软件版本实现对这个有不同的处理，但正则稳定些？
                MESSAGES_LIST+=("$filepath")
            # 检查是否是多模态文件（图片、PDF等）
            elif [[ "$file_type" =~ ^image/ ]] || [[ "$file_type" =~ ^application/pdf ]] || [[ "$filepath" =~ \.(png|jpg|jpeg|gif|bmp|pdf|txt)$ ]] || is_text_file "$filepath" ; then
                MULTIMODAL_FILES+=("$filepath")
            else
		echo "文件类型不支持：$filepath" >&2
                UNSUPPORTED_FILES_LIST+=("$filepath")
            fi
        else
            echo "警告：文件不存在或不可读，已跳过: $filepath" >&2
        fi
    done <<< "$RFM_SELECTED_FILES"
fi

# 从命令行参数获取文件列表（类似处理）
if [ $# -gt 4 ]; then
    shift 4
    for filepath in "$@"; do
        if [ -f "$filepath" ] && [ -r "$filepath" ]; then
            file_type=$(file -b --mime-type "$filepath")

            if [[ "$filepath" =~ \.rfmAI\.md$ ]]; then
                MESSAGES_LIST+=("$filepath")
            elif [[ "$file_type" =~ ^image/ ]] || [[ "$file_type" =~ ^application/pdf ]] || [[ "$filepath" =~ \.(png|jpg|jpeg|gif|bmp|pdf|txt)$ ]] || is_text_file "$filepath" ; then
                MULTIMODAL_FILES+=("$filepath")
            else
		echo "文件类型不支持：$filepath" >&2
                UNSUPPORTED_FILES_LIST+=("$filepath")
            fi
        else
            echo "警告：文件不存在或不可读，已跳过: $filepath" >&2
        fi
    done
fi

# 验证必须至少提供提示词或文件
if [ -z "$rfm_AI_MODEL_prompt" ] && [ ${#MULTIMODAL_FILES[@]} -eq 0 ]; then
    echo "错误：必须提供提示词或至少一个文件" >&2
    exit 1
fi
